perm filename APP1[AIM,DBL] blob sn#126871 filedate 1974-10-29 generic text, type T, neo UTF8
00100	.DEVICE XGP
00200	.FONT 1 "FIX25"
00300	.FONT 2 "SIGN57"
00400	.FONT 3 "SHD40"
00500	.FONT 4 "BDI25"
00600	.FONT 5 "NGB30"
00700	.FONT 6 "NGR20"
00800	.TURN ON "↓_π{"
00900	.TURN ON "⊗" FOR "%"
01000	.PAGE FRAME 53 HIGH 76 WIDE
01100	.MACRO B ⊂ BEGIN VERBATIM GROUP ⊃
01200	.MACRO E ⊂ APART END ⊃
01300	.TABBREAK
01400	.EVERY HEADING(⊗3BEINGS⊗*,,⊗4Doug Lenat⊗*)
     

00100	.EVERY FOOTING(⊗6Fourth Draft .... {DATE},page A1.{IF PAGE = 1 THEN 1 ELSE PAGE},BEING PARTS)
00200	.PORTION APPENDIX
00300	.COUNT PAGE PRINTING 1
00400	.NEXT PAGE
00500	⊗2APPENDIX 1. ⊗*   ⊗3BEING PARTS⊗*
00600	
00700	⊗4IDEN  ⊗*  How  is  this  BEING  referenced  in  English  sentences?
00800	Implemented  as  productions,  whose  left sides may make arbitrarily
00900	complex examinations of the world (search for assertions and
01000	query BEINGs' parts). If the phrase is recognized,
01100	the right  side may  cause
01200	arbitrarily complex side effects before returning a value.
01300	
01400	⊗4ARGS ⊗* How many?   Which are required and which are optional? What
01500	variables must remain local to this BEING?   Which  global  variables
01600	are accessed by some part of this BEING?
01700	
01800	⊗4ARG-CHECK   ⊗*   Predicates   which   examine   each  argument  for
01900	suitability. This could include whether defined,  whether  numerical,
02000	or  something  more  complex  
02100	(e.g., "is arg2 the name of a BEING whose
02200	DATA-STRUCTURE part requires it be initialized to a non-null value?")
02300	
02400	⊗4EVAL-ARGS ⊗* Is the program an  NLAMBDA?  Is  the  code  it  writes
02500	NLAMBDA?  If  so,  which  arguments (if any) should be evaluated upon
02600	entry?
02700	
02800	⊗4WHAT ⊗* A brief summary of the global purpose of the BEING.    This
02900	is  usually  a  template  for  an  English  sentence, more useful for
03000	communication with the user than with other BEINGs.  The variables in
03100	this sentence could be instantiated by examining the world, by asking
03200	other BEINGs, by the BEING who called this one, etc.
03300	
03400	⊗4WHY ⊗* A justification  for  this  BEING's  existence;  why  it  is
03500	called.  The role of the caller to fill in pieces of WHY is much more
03600	important than with the WHAT part.
03700	
03800	⊗4HOW  ⊗*  A  summary  of  the  method(s) used by the BEING to do its
03900	thing. This is a summary of the global  strageties  this  BEING  will
04000	try,  as  contrasted to the more specific parts listed below.  Again,
04100	this is more for the user's benefit than for other BEINGs'.
04200	
04300	⊗4EFFECTS  ⊗*  What  will  be  true   after   calling   this   BEING?
04400	Post-conditions.    These are broken into main and minor effects, and
04500	weighted as to certainty  that  they  will  occur.     This  part  is
04600	implemented  as productions:  all the EFFECTS parts of all the BEINGS
04700	are merged into a large production system. This is then searched
04800	(pattern-invoked) when
04900	some BEING wants something to be true.
05000	
05100	⊗4WHEN  ⊗* Factors and weights giving the BEING's temporal immediacy.
05200	This is computed as a sum of weighted factors.
05300	Although PUP6  should  probably
05400	compare  descriptions  of "desire to be in control," rather than just
05500	numbers, this works sufficiently well for the  present.  Perhaps  the
05600	weakness of perceptrons is important only if they are a major part of
05700	the program. In our case, each BEING has a set of triples here,  each
05800	of which is a BEING call. They must EVALuate to, respectively, T/NIL,
05900	a weight (to be added in  if  T),  and  a  sentence  justifying  this
06000	particular factor.
06100	
06200	⊗4META-CODE  ⊗*  The  "body"  of  the  code,  but with uninstantiated
06300	subparts. This may contain goal statements, nondeterministic calls to
06400	other  BEINGS, and
06500	uninstantiated  pieces  which  fill  themselves in by
06600	asking other parts of this BEING, its caller, or the user.
06700	
06800	⊗4COMMENTS ⊗* This is a BEING part, and should be distinguished from
06900	the English-like sentences which are scatterred throughout each part
07000	to aide comprehension. This part  is simply a list of instructions
07100	for filling in undefined "slots" in other parts. Each member of 
07200	COMMENTS is evalled, just prior to attempting the META:CODE part.
07300	
07400	⊗4REQUISITES ⊗* Suppose this BEING ⊗4is⊗* chosen to  be  in  control.
07500	What  must  be  satisfied  just  before  (pre-)  the  BEING executes?
07600	just after (post-)and during (co-) execution? This  is  really  three
07700	separate  BEING  parts.  The satisfying is ⊗4active⊗*, in that if the
07800	conditions aren't true, other BEINGs will be called to  try  to  make
07900	them  true.  (If  ⊗4passive⊗*,  the  BEING  would  simply  fail.  The
08000	ARG-CHECK part is passive in this sense.)
08100	
08200	⊗4DEMONS  ⊗*  Which  demons  should  be  enabled  during  the BEING's
08300	execution? They remain active as long as this BEING activation exists
08400	in the control tree.
08500	
08600	⊗4AFFECTS  ⊗*  Which other BEINGs might be called by this BEING? Why?
08700	That is, which parts of this BEING want what to be done?
08800	
08900	⊗4COMPLEXITY ⊗* A vector describing such features  as  recursiveness,
09000	transparency  to  user, etc. Often the CHOOSE-FROM BEING will compare
09100	several BEINGs by a linear  function  on  this  vector.   The  actual
09200	components  settled  on  were:  how easy it is to call, its chance of
09300	calling* itself, its chance of succeeding, the effort in  trying  it,
09400	the efficiency of the code it will generate,
09500	and  whether  it  must be inhibited absolutely at present.  All these
09600	range over [0,1].
09700	
09800	⊗4SPECIALIZATIONS ⊗* How to write a  more  streamlined,  special-case
09900	version  of  this  BEING.     What decisions must be made, and how do
10000	they simplify the parts of the new BEING?
10100	
10200	⊗4ALTERNATIVES ⊗* If this BEING fails,  what  are  some  equivalent
10300	BEINGs?
10400	
10500	⊗4GENERALIZATIONS  ⊗* What are some general BEINGs, encompassing
10600	this one?
10700	
10800	⊗4PREDICATE ⊗* How many values does this BEING return?    What is the
10900	type of each one (numeric, logical, etc.)?  Are there side effects as
11000	well?
11100	
11200	⊗4DATA-STRUC ⊗* If it is  one,  what  must  be  done  to  initialize,
11300	access,  insert,  and  delete  elements?   What is the structure of a
11400	typical element?
11500	
11600	⊗4ENCODABLE ⊗* How to control writing a specialized new BEING: which
11700	other BEING parts must be called, and in what order.
11800	
11900	⊗4INHIBIT-CURRENT-DEMONS ⊗* A lock/unlock mechanism. When handling a
12000	demonic interrupt, we cannot permit the demon to interrupt us again.
12100	
12200	⊗4FORM-CHANGING ⊗* 
12300	Does the entire form of some new BEING's part(s) have to be altered?
12400	If so, how?
12500	
12600	Below is listed,  for  each  BEING part, the number of BEINGS in PUP6
12700	which had this part specified for them.  Since there were exactly one
12800	hundred  BEINGS,  these  are also percentages.   On the average, each
12900	part was used in 29.3% of all BEINGs. This is slightly unfair to PUP6,
13000	since the ⊗4absence⊗* of some BEING parts (e.g., NLAMBDA) conveys a
13100	nontrivial bit of information. Also present is the ⊗4use⊗* of each part.
13200	
13300	.VERBATIM
13400	
13500	54  IDEN		Decide if this BEING gets control
13600	35  IMPLICIT:ARGS	Initialize when this BEING gets control
13700	63  EXPLICIT:ARGS	Bind when this BEING gets control
13800	81  EXPLICIT:ARGS:CHECK Evaluate when this BEING gets control
13900	 4  NLAMBDA		Evaluate when this BEING gets control
14000	 3  NON:EVAL:ARGS	Used when creating specialization of this BEING
14100	82  WHAT		Instantiate and type out to user if requested
14200	77  HOW			Instantiate and type out to user if requested
14300	72  WHY			Instantiate and type out to user if requested
14400	27  MAIN:EFFECTS	Decide if this BEING gets control
14500	 2  MINOR:EFFECTS	Decide if this BEING gets control
14600	19  WHEN		Decide if this BEING gets control
14700	70  META:CODE		Evaluate when this BEING gets control
14800	16  COMMENTS		Evaluate when this BEING gets control
14900	 6  PRE:REQUISITES	Satisfy when this BEING gets control
15000	 0  CO:REQUISITES	Satisfy when this BEING gets control
15100	 9  POST:REQUISITES	Satisfy when this BEING gets control
15200	 7  DEMONS		Activate when this BEING gets control
15300	14  AFFECTS		Decide if this BEING gets control
15400	92  COMPLEXITY:VECTOR   Decide if this BEING gets control
15500	27  GENERALIZATIONS	Decide what BEING to pass control to
15600	40  SPECIALIZATIONS     Used when creating specialization of this BEING
15700	16  ALTERNATIVES	Decide what BEING to pass control to
15800	15  PREDICATE		Asked questions by other BEINGs' parts
15900	 4  DATA:STRUCTURE	Asked questions by other BEINGs' parts
16000	 9  ENCODABLE		Used when creating specialization of this BEING
16100	 5  INHIBIT:CURRENT:DEMONS    Eval. when this BEING gets control
16200	 1  FORM:CHANGING	Evaluate when this BEING gets control